namespace Crux.Core.Domains;
/// <summary>
/// IDomainEventBus
/// </summary>
public interface IDomainEventBus
{
    /// <summary>
    ///
    /// </summary>
    /// <param name="eventData"></param>
    void Post(IDomainEvent eventData);
    /// <summary>
    ///
    /// </summary>
    /// <typeparam name="TDomainEvent"></typeparam>
    void Register<TDomainEvent>() where TDomainEvent : IDomainEvent;
    /// <summary>
    ///
    /// </summary>
    /// <param name="eventDataType"></param>
    void Register(Type eventDataType);
    /// <summary>
    ///
    /// </summary>
    /// <param name="eventDataType"></param>
    void UnRegister(Type eventDataType);
    /// <summary>
    ///
    /// </summary>
    /// <typeparam name="TDomainEvent"></typeparam>
    void UnRegister<TDomainEvent>() where TDomainEvent : IDomainEvent;
}